МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
" Список"
ЗВІТ
до лабораторної роботи № 6
з
"Програмування. Частина III.
Структури даних та алгоритми"
МЕТА РОБОТИ
Вивчення фундаментальної абстрактної структури даних - черги. Набуття практичних навичок побудови черги, дослідження динаміки її вмісту та використання черг для розв'язання прикладних задач.
ВИБІР ІНДИВІДУАЛЬНОГО ЗАВДАННЯ
Змоделюйте чергу (або дек) згідно з завданням. Перепишіть основні операції для роботи з чергою (деком), і продемонструйте їх застосування для операцій додавання і вилучення елементів в чергу (дек).
Для цього задайте послідовність з N цілих чисел. Всі додатні числа послідовно заносяться в чергу (дек), кожне від’ємне число вилучає з черги (деку) один елемент (при роботі з деком, парні числа працюють з одним кінцем деку, а непарні – з іншим). Показувати всі зміни, що будуть відбуватись у черзі (деку).
Перша літера П (11)-> I 9
Перша літера прізвища
Номер студента в списку групи
Варіант
А, І, С
Б, Ї, Т
В, Й, У
Г, К, Ф
Д, Л, Х
Е, М, Ц
Є, Н, Ч
Ж,О,Ш,Щ
З, П, Ю
И, Р, Я
10, 20, 30
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
9, 19, 29
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
8, 18, 28
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
7, 17, 27
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
6, 16, 26
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
5, 15, 25
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
4, 14, 24
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
3, 13, 23
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
2, 12, 22
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
1, 11, 21
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
9. Написати програму, яка будує лінійний зв’язаний список, що містить N великих букв латинського алфавіту, які задаються випадковим чином, і перевіряє, чи перший елемент списку містить букву “А”, якщо це так, то додається ще одна буква “А” в кінець списку, якщо ні – то зі списку вилучаються всі букви “А”. Вивести отриманий результат. (Примітка: великі букви латинського алфавіту в таблиці ASCII мають номери від 65 до 90 ).
Код програми
List.h
#pragma once
#include <iostream>
using namespace std;
template <class T> class List
{
private:
struct Element
{
T data;
Element *next;
Element *prev;
};
Element *begin;
Element *end;
int length;
public:
List(); // instead init()
~List(); // clear()
bool contains(T);
bool isEmpty();
int size();
void push_front(T);
void push_back(T);
void push_after(T, T);
void push_before(T, T);
void delFromData(T);
void printStraight();
void printReverse();
void clear();
void taskVar9();
};
template <class T>
List<T>::List() {
begin = NULL;
end = NULL;
length = 0;
}
template <class T> List<T>::~List()
{
clear();
}
template <class T> bool List<T>::isEmpty()
{
return begin == NULL;
}
template <class T> int List<T>::size()
{
return length;
}
template <class T> void List<T>::delFromData(T newData)
{
if (!isEmpty())
{
if (newData == begin->data && begin->next) {
Element *temp = begin;
begin = begin->next;
begin->prev = NULL;
delete temp;
length--;
return;
}
else if (newData == begin->data && begin == end) {
begin->next = begin->prev = begin = NULL;
delete begin;
length = 0;
return;
}
if (newData == end->data) {
Element *temp = end;
end = end->prev;
end->next = NULL;
delete temp;
length--;
return;
}
Element *temp = begin;
while (temp) {
if (temp->data == newData) {
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
delete temp;
length--;
break;
}
temp = temp->next;
}
}
else cout << "\nList is empty" << endl;
}
template <class T> void List<T>::push_back(T data)
{
Element *temp = new Element;
temp->next = NULL;
temp->data = data;
if (!isEmpty()) {
temp->prev = end;
end->next = temp;
end = temp;
}
else {
temp->prev = NULL;
begin = end = temp;
}
...